TEI versus XML.
TEI.
TEI.
<element>, @attribut.
TEI dans un navigateur : CSS et XSLT (brève introduction au cours de la 6e séance).
ODD.
TEI en particulier le module [tei].
TEI en particulier le module [tei] (suite).
TEI, brève introduction à XPath.
<teiHeader>
@attributs pour créer une relation entre deux ou plusieurs nœuds
<teiCorpus> du module [core] et primary source
XSLT
XML) a été développé en 1996.
TEI) a été créée en 1987 à l’initiative d’un groupe d’experts membres de l’Association for Computer and the Humanities, de l’Association for Computational Linguistics et de l’Association for Literary and Linguistic Computing. C’est au cours d’une conférence à Poughkeepsie que les recommandations et principes ont été définis. En 2000, le consortium TEI-C (association sans but lucratif) voit le jour ; sa mission : développer et maintenir les lignes directrices de la TEI — il s’agit principalement d’un groupement de chercheurs internationaux qui collaborent au développement de la TEI, élus pour une période de 3 ans renouvelables au sein du TEI Technical Council. Les recommandations sont disponibles sur le site tei-c.org et régulièrement mises à jour — actuellement, version 3.5.0 de TEI P5.
Complément de lecture :
BURNARD, Lou. Qu’est-ce que la Text Encoding Initiative ? Nouvelle édition [en ligne]. Marseille : OpenEdition Press, 2015. Disponible sur Internet : http://books.openedition.org/oep/1237. ISBN : 9782821855816. DOI : 10.4000/books.oep.1237.
LaTeX, HTML, XHTML, ainsi que les langages issus de XML, Resource Description Framework, (abr. RDF), Web Ontology Language (abr. OWL) et bien sûr, TEI — il n’est pas rare de lire TEI-XML.
Balise(s) (= tag(s)) : Une balise est une unité syntaxique qui sera comprise et interprétée par un programme. Elle est entourée de deux chevrons ouvrant et fermant “<” et “>” ; par exemple pour indiquer respectivement le commencement et la fin d’un paragraphe :
<p> “texte du paragraphe” <p>. “p” qui suit le chevron ouvrant de la balise ouvrante indique ici que l’information contenue entre la balise ouvrante et fermante est un paragraphe (voir III. Questions de sémantique : <element>)
On parle de balises ouvrante et fermante — ou de balises de début et de fin. Notez que pour la balise fermante (qui suit le contenu), le chevron fermant est précédé de /.
Il existe également une balise d’élément vide lorsque il n’y a pas d’information à ajouter entre une balise ouvrante et une balise fermante.
<!-- Par exemple : <code><img src="adresse de l'image à insérer" /></code> -->
<img src="exemple.png" />
<!-- ou encore un saut de ligne <code><br /></code> -->
<br />
Notez que le chevron fermant la balise d’élément vide est précédé de /.
TEI versus XML
TEI et XML
TEI et XML sont une forme de Standard Generalized Markup Language, abr. SGML, autrement dit un langage de description à balises (= tag(s)), permettant ainsi d’enrichir l’information désirée.
TEI et XML a des balises insérées qui permettent de structurer l’information, par exemple en titre, chapitre, paragraphe, etc., en fonction du matériel étudié (livre, manuscrit, tablette…).
TEI et XML, le vocabulaire généalogique est utilisé : parent, enfant, frère, ancêtre, descendant (parent, child, sibling, ancestor, descendent) — Voir XPath, séance 2.
TEI et XML sont des métalangages, c’est-à-dire qu’ils ont tous les deux une grammaire particulière avec une syntaxe et une sémantique qu’ils leur sont propres.
TEI et XML sont tous les deux extensibles : en fonction des besoins, l’utilisateur peut créer ses propres balises (tags) ou langage.
TEI et XML
XML est encodé selon la norme du XML décrite par le World Wide Web Consortium1, abr. W3C (http://www.w3c.org/xml) ; tandis que l’encodage TEI est encodé selon la norme du Text Encoding Initiative Consortium (https://www.tei-c.org).
XML est très largement utilisé pour distribuer les données sur Internet, permettre l’échange d’information entre les programmes, ainsi que par les traitements de texte ; tandis que l’encodage TEI va être utilisé pour une utilisation plus spécifique en particulier l’analyse de sources primaires.
XML est interopérable, c’est-à-dire qu’il permet la communication entre différents outils existants ou futurs, sans qu’il ne soit nécessaire de modifier le code ; tandis que la TEI est interchangeable, c’est-à-dire qu’elle permet l’échange de communication pour l’analyse des textes de différents corpus — d’ailleur le “I” de TEI a quelques fois valeur de interchange — au sujet de la TEI interopérable vs interchangeable : « TEI tags are usually of type 1, because they are the result of human interpretation. Most other XML tags, however, are of type 2 ». (Schmidt, 20142).
XML est moins précise que celle de la TEI pour l’encodage de documents textuels.
Complément de lecture :
BURNARD, Lou. La TEI et le XML In : Qu’est-ce que la Text Encoding Initiative ? [en ligne]. Marseille : OpenEdition Press, 2015. Disponible sur Internet : http://books.openedition.org/oep/1298. ISBN : 9782821855816. DOI : 10.4000/books.oep.1298.
[1] : https://www.w3.org/Consortium/ ↥
[2] : Desmond Schmidt, « Towards an Interoperable Digital Scholarly Edition », Journal of the Text Encoding Initiative [Online], Issue 7 | November 2014, Online since 01 January 2014. URL : http://journals.openedition.org/jtei/979 ; DOI : 10.4000/jtei.979.↥
TEI
La TEI met l’accent sur ce qui est partagé par tous les types de documents, qu’ils soient représentés physiquement sous une forme numérique sur un disque ou une carte mémoire, sous une forme imprimée comme un livre ou un journal, sous une forme écrite comme un manuscrit ou un codex, ou sous une forme inscrite dans la pierre ou sur une tablette de cire. Cette continuité facilite la migration du texte depuis des manifestations plus anciennes, comme l’imprimé ou le manuscrit, vers d’autres plus récentes comme le disque ou l’écran. C’est pourquoi la vision de la TEI de ce qu’est le texte est largement conditionnée par ce que le texte a été dans le passé, sans toutefois trop compromettre ce que le texte peut devenir dans le futur. Elle essaie de traiter tous les types de documents numériques de la même façon, qu’ils soient « nativement numériques » ou non. — source : Burnard, Lou. 2015, Qu’est-ce que la Text Encoding Initiative ? Nouvelle édition [en ligne]. Marseille : OpenEdition Press, 2015. Disponible sur Internet : http://books.openedition.org/oep/1237. ISBN : 9782821855816. DOI : 10.4000/books.oep.1237.
Voir également la vidéo suivante :
TEI
Par défaut dans Oxygen, à la création d’un nouveau document TEI, voici le code qui précède les <element>s :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml"
schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml version=“1.0” encoding=“UTF-8”?> : déclaration du jeu de caractères ; dans le cas précis Universal Character Set Transformation Format - 8 bits (abr. “UTF-8”) — liste de jeu de caractères possible. version=“…” permet de définir la version de XML utlisée sachant que la “version 1.0” est celle qui est la plus courante.
<?xml-model href=“IRI-reference” type=“application/xml” schematypens=“IRI-reference”?> : indication du modèle de schéma à suivre pour que le processeur puisse lire les instructions ; dans le cas précis le langage de description “Regular Language for XML Next Generation” (abr. “Relax NG”) qui spécifie la structure des documents XML.
→ href précise la localisation du schéma de référence grâce un type d’adresse informatique <IRI-reference> (“Internationalized Resource Identifier”, abr. ‘IRI”)
→ type specifie le type de contenu référencé dans le schéma ; dans le cas précis XML
→ schematypens specificie le nom du namespace du langage de schéma ; dans le cas précis schematron — type et schematypens permettent l’identification des schémas utilisés.
Un langage de schéma : un schéma permet de définir les règles de validité qui suit le vocabulaire XML
Schematron est un langage qui permet de valider la structure d’un document XML. Lire également le schéma TEI.
namespace relatif à l’encodage TEI
<TEI xmlns="http://www.tei-c.org/ns/1.0">
Une fois les déclarations de schémas faites, il faut définir le namespace de référence dans le plus haut niveau du document “TEI”.
→ Un namespace permet d’indiquer à quel domaine les <element>s et @attributs font référence ; un namespace est unique et suit les recommandations du W3C. A lire également les “TEI namespaces”. Sa syntaxe se compose d’un attribut xmlns suivi de l’Uniform Resource Identifier (abr. “URI”) de référence ; dans le cas précis, celle de la “TEI” http://www.tei-c.org/ns/1.0. Ainsi pour chaque namespace dans le document “TEI”, l’URI permettra de comparer sa conformité ou non.
→ L’élement TEI, membre du module du Default Text Structure [textstructure]. Si le document est composé de plusieurs TEI, teiCorpus (pour le moment) est à privilégier, suivi de plusieurs TEI — voici d’autres exemples de Default Text Structure.
Complément de lecture :
Associating Schemas with XML documents 1.0 (Third Edition)
XML Schema Part 2: Datatypes Second Edition
<element>, @attribut
Un document TEI est constitué de plusieurs modules, imbriqués ou non, dans lesquels se trouvent plusieurs <element>s et @attributs ordonnés dans des classes.
<element>s) :
Une classe de modèle permet d’ordonner les <element>s. Les classes peuvent être imbriquées : il y a des classes supérieures et inférieures — les <element>s d’une classe B héritent alors de la classe supérieure A (voir l’exemple ci-dessous) ; autrement dit, les classes de modèles sont ordonnées hiérarchiquement selon une logique sémantique au sein d’un module. Il existe à ce jour 119 classes de modèles ou classes d’<element>s référencés Conventionnellement, une classe d’<element> est préfixée de “model.” et s’écrit “model.+ <element> principal”.
Exemple pour model.biblPart :
Explication : la classe d’<element> model.biblPart du module [tei] est utilisée par l’élément <bibl> et deux autres classes d’<element>s sont membres de model.biblPart, model.imprintPart et model.respLike.
<!-- Source : https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ref-bibl.html -->
<bibl>
<title level="a">L'Enracinement</title>
<author>Simone Weil</author>, <title>Prélude à une déclaration des devoirs envers l'être
humain </title>. <publisher>Gallimard</publisher>
<date>1968</date>.
</bibl>
Dans l’exemple précédent, on distingue l’utilisation de plusieurs classes d’<element>s : model.biblPart [<bibl>] dans lequel sont inclus (1) model.imprintPart [<publisher>], (2) l’élément <bibl> membre du module [core] et les <element>s <titre> et <date> membre également du module [core]. on remarque bien ici l’imbrication d’<element>s appartenant à des classes d’<element>s contenus dans des modules.
Note : <bibl> est membre à la fois de model.biblLike et model.biblPart. Autrement dit, un <element> peut être membre de plusieurs classes d’<element>s, donc de plusieurs modules. Plus généralement, il faut retenir qu’ une classe d’<element> hérite de la classe “parent” dont il est l’enfant.
@attributs :
Une classe d’@attributs permet d’ordonner les @attributs, selon la même logique que pour les classes d’<element>s. Il existe actuellement 74 classes d’@attributs disctinctes — dans certains cas, de nouvelles classes ont été ajoutées aux classes d’@attributs, comme c’est le cas par exemple de att.global.facs qui “appartient” à att.global. On dit alors, par exemple, que la classe att.global est étendue à la classe att.global.facs laquelle ne contient que l’@attribut @facs. Conventionnellement, une classe d’@attributs est préfixée de “att.” et s’écrit “att.+ @attribut principal”.
<element>s :
Chaque <element> appartient à une classe de modèle <element>s. Il existe à ce jour 573 <element>s (voir le détail de la dernière mise à jour, janvier 2019 : 3c0c64ec4 de la TEI P5 version 3.5.0.
<element> :
In the context of Text Encoding Initiative (TEI), an element, which is a markup tag, is the first criterion to analyze data (text, image, sound, etc.). An element is conventionally marked up <element>. The markup data in between the opening tag “<” and the closing tag “>” indicates the type of information analyzed: for example, <persName>ʿAnatu</persName>. One can easily understand that the element refers to a personal name, in this example ʿAnatu … Generally, the semantic of an <interp> stands for interpretation, <w> for word, <l> for line, and <text> for text.
@attributs :
Chaque @attribut appartient à une classe d’@attributs. Il existe 261 @attributs. Un élément a généralement un @attribut auquel on ajoute une valeur.
@attribut :
an attribute adds useful precision both for text analysis and for interpretation during the process of the exchange of data. An attribute stands within the element tag.(Ibidem Bigot Juloux 2018)
c | cl | interpGrp | m | pc | phr | s | span | spanGrp | w
certainty | precision | respons
abbr | add | addrLine | address | analytic | author | bibl | biblScope | biblStruct | binaryObject | cb | choice | cit | citedRange | corr | date | del | desc | distinct | divGen | editor | email | emph | expan | foreign | gap | gb | gloss | graphic | head | headItem | headLabel | hi | imprint | index | item | l | label | lb | lg | list | listBibl | measure | measureGrp | media | meeting | mentioned | milestone | monogr | name | note | num | orig | p | pb | postBox | postCode | ptr | pubPlace | publisher | q | quote | ref | reg | relatedItem | resp | respStmt | rs | said | series | sic | soCalled | sp | speaker | stage | street | teiCorpus | term | textLang | time | title | unclear | unit
activity | channel | constitution | derivation | domain | factuality | interaction | locale | particDesc | preparedness | purpose | setting | settingDesc | textDesc
case | colloc | def | dictScrap | entry | entryFree | etym | form | gen | gram | gramGrp | hom | hyph | iType | lang | lbl | mood | number | oRef | orth | pRef | per | pos | pron | re | sense | stress | subc | superEntry | syll | tns | usg | xr
actor | camera | caption | castGroup | castItem | castList | epilogue | move | performance | prologue | role | roleDesc | set | sound | spGrp | tech | view
cell | figDesc | figure | formula | notatedMusic | row | table
char | charDecl | charName | charProp | g | glyph | glyphName | localName | mapping | unicodeName | value
TEI header [header] :abstract | appInfo | application | authority | availability | biblFull | cRefPattern | calendar | calendarDesc | catDesc | catRef | category | change | classCode | classDecl | correction | correspAction | correspContext | correspDesc | creation | distributor | edition | editionStmt | editorialDecl | encodingDesc | extent | fileDesc | funder | geoDecl | handNote | hyphenation | idno | interpretation | keywords | langUsage | language | licence | listChange | listPrefixDef | namespace | normalization | notesStmt | prefixDef | principal | profileDesc | projectDesc | publicationStmt | punctuation | quotation | refState | refsDecl | rendition | revisionDesc | samplingDecl | schemaRef | scriptNote | segmentation | seriesStmt | sourceDesc | sponsor | stdVals | styleDefDecl | tagUsage | tagsDecl | taxonomy | teiHeader | textClass | titleStmt | xenoData
bicond | binary | cond | default | f | fDecl | fDescr | fLib | fs | fsConstraints | fsDecl | fsDescr | fsdDecl | fsdLink | fvLib | if | iff | numeric | string | symbol | then | vAlt | vColl | vDefault | vLabel | vMerge | vNot | vRange
ab | alt | altGrp | anchor | join | joinGrp | link | linkGrp | seg | timeline | when
accMat | acquisition | additional | additions | adminInfo | altIdentifier | binding | bindingDesc | catchwords | collation | collection | colophon | condition | custEvent | custodialHist | decoDesc | decoNote | depth | dim | dimensions | explicit | filiation | finalRubric | foliation | handDesc | height | heraldry | history | incipit | institution | layout | layoutDesc | locus | locusGrp | material | msContents | msDesc | msFrag | msIdentifier | msItem | msItemStruct | msName | msPart | musicNotation | objectDesc | objectType | origDate | origPlace | origin | physDesc | provenance | recordHist | repository | rubric | scriptDesc | seal | sealDesc | secFol | signatures | source | stamp | summary | support | supportDesc | surrogates | typeDesc | typeNote | watermark | width
addName | affiliation | age | birth | bloc | climate | country | death | district | education | event | faith | floruit | forename | genName | geo | geogFeat | geogName | langKnowledge | langKnown | listEvent | listNym | listObject | listOrg | listPerson | listPlace | listRelation | location | nameLink | nationality | nym | object | objectIdentifier | objectName | occupation | offset | org | orgName | persName | person | personGrp | persona | place | placeName | population | region | relation | residence | roleName | settlement | sex | socecStatus | state | surname | terrain | trait
arc | eLeaf | eTree | forest | graph | iNode | leaf | listForest | node | root | tree | triangle
annotationBlock | broadcast | equipment | incident | kinesic | pause | recording | recordingStmt | scriptStmt | shift | transcriptionDesc | u | vocal | writing
TEI modules [tagdocs] :altIdent | alternate | anyElement | att | attDef | attList | attRef | classRef | classSpec | classes | code | constraint | constraintSpec | content | dataFacet | dataRef | dataSpec | datatype | defaultVal | eg | egXML | elementRef | elementSpec | empty | equiv | exemplum | gi | ident | listRef | macroRef | macroSpec | memberOf | model | modelGrp | modelSequence | moduleRef | moduleSpec | outputRendition | param | paramList | paramSpec | remarks | schemaSpec | sequence | specDesc | specGrp | specGrpRef | specList | tag | textNode | val | valDesc | valItem | valList
app | lacunaEnd | lacunaStart | lem | listApp | listWit | rdg | rdgGrp | variantEncoding | wit | witDetail | witEnd | witStart | witness
TEI | argument | back | body | byline | closer | dateline | div | div1 | div2 | div3 | div4 | div5 | div6 | div7 | docAuthor | docDate | docEdition | docImprint | docTitle | epigraph | floatingText | front | group | imprimatur | opener | postscript | salute | signed | text | titlePage | titlePart | trailer
addSpan | am | damage | damageSpan | delSpan | ex | facsimile | fw | handNotes | handShift | line | listTranspose | metamark | mod | path | redo | restore | retrace | secl | sourceDoc | space | subst | substJoin | supplied | surface | surfaceGrp | surplus | transpose | undo | zone
Exemple 1, fac-similé dont la surface n’est pas précisément définie, sans distinction de zone ↥ :
<!-- Source : https://www.tei-c.org/release/doc/tei-p5-doc/en/html/PH.html -->
<facsimile>
<surfaceGrp n="leaf1">
<surface>
<graphic url="page1.png"/>
</surface>
<surface>
<graphic url="page2-highRes.png"/>
<graphic url="page2-lowRes.png"/>
</surface>
</surfaceGrp>
</facsimile>
Exemple 2, fac-similé dont deux des zones à l’intérieur de la surface sont définies précisément :
<!-- Source : https://www.tei-c.org/release/doc/tei-p5-doc/en/html/PH.html -->
<facsimile>
<surface ulx="50" uly="20" lrx="400"
lry="280">
<zone ulx="0" uly="0" lrx="500" lry="321">
<graphic url="http://upload.wikimedia.org/wikipedia/commons/5/50/Handschrift.karlsruhe.blb.jpg"/>
</zone>
<zone ulx="50" uly="20" lrx="210" lry="280">
<!-- left hand page -->
</zone>
<zone ulx="240" uly="25" lrx="400"
lry="280">
<!-- right hand page -->
</zone>
<zone ulx="90" uly="40" lrx="200" lry="225">
<!-- written part of left hand page -->
</zone>
</surface>
</facsimile>
Exemple 3, fac-similé avec une transcription en parallèle de plusieurs zones à l’intérieur de la surface :
<!-- Source : https://www.tei-c.org/release/doc/tei-p5-doc/en/html/PH.html -->
<!-- sélection des zones à transcrire dans la surface -->
<facsimile>
<surface ulx="0" uly="0" lrx="200" lry="300">
<zone xml:id="B49r" ulx="0" uly="0"
lrx="200" lry="300">
<graphic url="Bovelles-49r.png"/>
</zone>
<zone ulx="105" uly="76" lrx="175"
lry="160">
<graphic url="Bovelles49r-detail.png"/>
</zone>
<zone xml:id="B49rHead" ulx="25" uly="25"
lrx="180" lry="60"/>
<!-- contains the title -->
<zone xml:id="B49rPara2" ulx="28" uly="75"
lrx="175" lry="178"/>
<!-- contains the first paragraph in italics -->
<zone xml:id="B49rFig1" ulx="105" uly="76"
lrx="175" lry="160"/>
<!-- contains the figure -->
<zone xml:id="B49rW457" ulx="45" uly="125"
lrx="60" lry="130"/>
<!-- contains the word "pendans" -->
</surface>
</facsimile>
<!-- Transcription du contenu textuel/image dans chacune des zones précédemment sélectionnées -->
<pb facs="#B49r"/>
<fw>De Geometrie 49</fw>
<head facs="#B49rHead"> DU SON ET ACCORD DES CLOCHES ET <lb/> des alleures des
chevaulx, chariotz & charges, des fontaines:& <lb/> encyclie du monde,
& de la dimension du corps humain.<lb/> Chapitre septiesme</head>
<div n="1">
<p style="text-align: justify">Le son & accord des cloches pendans en ung mesme <lb/> axe, est faict en
contraires parties.</p>
<p rend="it" facs="#B49rPara2">LEs cloches ont quasi fi<lb/>gures de rondes
pyra<lb/>mides imperfaictes & <lb/> irregulieres: & leur accord se
<lb/> fait par reigle geometrique. Com<lb/>me si les deux cloches C & D
<lb/> sont <w facs="#B49rW457">pendans</w> à ung mesme axe <lb/> ou essieu A B:
je dis que leur ac<lb/>cord se fera en co<ex>n</ex>traires parties<lb/>
co<ex>m</ex>me voyez icy figuré. Car qua<ex>n</ex>d <lb/> lune sera en
hault, laultre declinera embas. Aultrement si elles decli<lb/>nent toutes deux
ensembles en une mesme partie, elles seront discord, <lb/> & sera leur
sonnerie mal plaisante à oyr.<figure facs="#B49rFig1">
<graphic url="Bovelles49r-detail.png"/>
</figure>
</p>
</div>
Explication : La transcription est faite à partir d’un document dont les coordonnées de la surface sont définies :
@ulx = 0 et @uly = 0
@lrx = 200 et @lry = 300.
<surface> (à savoir une image d’une représentation textuelle par exemple), cinq zones <zone> sont identifiées/sélectionnées — toujours avec des coordonnées @ulx et @uly —, chacune avec un @xml:id unique. Ces @xml:id permettront d’identifier la transcription (ou le commentaire) de chacune des zones (images) sélectionnées :
@xml:id=“B49r” => @facs=“#B49r”
@xml:id=“B49rHead” => @facs=“#B49rHead”
@xml:id=“B49rPara2” => @facs=“#B49rPara2”
@xml:id=“B49rFig1” => @facs=“#B49rFig1”
@xml:id=“B49rW457” => @facs=“#B49rW457”
# précède chaque @facs (membre de la classe d’@attribut att.global.facs) qui pointe (renvoie) vers l’@xml:id (membre de la classe d’@attributs att.global) correspondant : @facs=“#B49r” → @xml:id=“B49r”.
caesura | metDecl | metSym | rhyme
TEI dans un navigateur : CSS et XSLT
CSS
Cascading Style Sheets (abr. CSS, feuille de style) permet d’ajouter du style aux documents, notamment HTMLXML et TEI — couleur, alignement, polices de caractère, tableaux, espacement… Un groupe du travail du W3C met à jour régulièrement les recommandations pour chaque style — exemple, color.
Parmi de nombreux sites qui permettent d’appréhender le CSS, celui du W3C ; alsacreations propose également une série de tutoriels très accessibles, ainsi qu’un forum d’entraide (inscription [gratuite] requise), tout comme stackoverflow. w3schools.com propose une liste de tous les styles avec des exemples, avec la possibilité de tester un style à partir d’un des exemples donnés sur le site.
<!-- Source : https://www.w3schools.com/css/css_syntax.asp -->
p {
color: red;
text-align: center;
}
Explication : Tous les contenus textuels situés dans les paragraphes (p) seront de couleur rouge et le texte aligné au centre.
Il existe des services de validation en ligne pour vérifier si vos styles sont conformes aux normes recommandées par les W3C, en particulier pour être aux normes “accessibilité pour tous” — exemple CSS Validation Servicew.
XSLT
eXtensible Stylesheet Language Transformations (abr. XSLT) permet de transformer un document XML et TEI de sorte qu’il puisse être aisément consultable et fonctionnel. Le format de transformation ne se limite pas à une page HTML, mais aussi au PDF ou à l’impression papier — plus généralement un document au format texte.
Le W3C met à jour les recommandations XSLT. Connaître XSLT n’est pas suffisant : il est impératif de connaître XPath pour sélectionner le contenu désiré à afficher (ou à manipuler).
w3schools.com permet d’appréhender XSLT, avec la possibilité de tester quelques éléments de tranformations dont les templates
Voir la section destinée XSLT (dernière séance)
TEI dont certains sont liés aux SIGs — voir la séance 6 consacrée notamment au TEI SIGs.
Littérature scientifique : https://journals.openedition.org/jtei/
Rester informé-e, fil Twitter TEI Consortium
La carte heuristique (ang. conventionnellement appelée mind map® — marque déposée) aide à structurer un projet (plus généralement ses pensées). Un premier témoignage de schématisation des concepts daterait du Moyen-Âge : le philosophe, écrivain et théologien majorquin Raymond Lulle a réalisé des schémas circulaires de concepts pour son arbre des sciences Arbor scientiae.
Source image : Gallica BNF
Il fut suivi par d’autres scientifiques qui ont schématisé des relations de parenté entre des groupes d’êtres vivants (arbres phylogénétiques), notamment le paléonthologue américain Edward Hitchock ou encore Charles Darwin dans le cadre de ses réflexions sur l’origine des espèces. Cependant, c’est au psychologue Antony P. Buzan (dit Tony Buzan) que nous devons le concept de la “carte heuristique” (mind map®) dans les années 70.
Il existe pléthores de logiciels pour réaliser une carte heuristique, parmi lesquels XMind — la version gratuite sans période d’essai est XMind 8.
Note : la version payante de XMind Pro permet de partager ses cartes heuristiques avec d’autres applications comme Evernote. Ce qui est plutôt pratique pour les utilisateurs d’Evernote — une application hautement recommandée pour les recherches et la prise de note.
ODD.
ODD = “One Document Does it all”. Une ODD contient une documentation d’un modèle à suivre.
Elle sert à personnaliser un schéma de spécification TEI (dont <element>, @attribut), appelé <schemaSpec> — autrement dit qui suit une sémantique — de sorte de rendre le schéma valide valide. “Un schéma combine des références aux modules ou aux groupes de spécifications avec d’autres déclarations atomiques. Le traitement d’un élément de schéma doit résoudre tous les conflits entre les déclarations qu’il contient ou les références. Des processeurs ODD différents peuvent générer des schémas et une documentation en utilisant différentes syntaxes concrètes.” (Source : <schemaSpec>)
Par défaut, une ODD est proposée — qui suit un schéma validé dans Oxygen.
Cependant, dans des cas bien précis, il peut être nécessaire de modifier l’ODD de sorte de rendre le document TEI valide. On parle alors de “modification”. On distingue deux types de modifications : (1) modification propre (“clean modification”), (2) modification sale (“unclean modification”).
A l’inverse d’une modification sale, la modification propre n’empêche pas la validité du document conformément aux modules de la TEI.
<element>s
<element>s
<element>s
@attributs ou de valeurs d’@attributs, d’un type de contenu
Une ODD personnalisée ne peut contenir qu’un seul <schemaSpec>. En outre, elle peut contenir quatre types d’information appartenant à des modèles :
<element>s de model.oddDecl pour spécifier le langage d’encodage
<element>s du moduleRef — membre de model.oddRef — qui fait référence aux modules TEI utilisés
@attributs optionnels suivants appartenant aux types de données teidata.xmlName (précise la valeur d’un @attribut) datatype) en fonction du contenu à importer : @key, @except, @include, @prefix, @url
Voici un exemple d’ODD prêt à être modifié si nécessaire :
Dans l’exemple ci-dessus, le schéma de spécification <schemaSpec> fait référence à quatre modules qui suivent la valeur de @start “TEI” (c’est-à-dire le module TEI) et identifié par @key : “header”, “core”, “tei” et “textstructure”. On peut compléter chaque <moduleRef> par les @attributs optionnels précédemment énumérés (point 4 ci-dessus).
Lien du wiki de la TEI wiki.tei-c.org.
Complément de lecture :
Bauman, Syd, and Julia Flanders. 2018. Introduction to Writing ODDs
Bauman, Syd, and Julia Flanders. 2010. Element list for ODD.
Lüngen, Harald et C. M. Sperberg-McQueen, 2012. « A TEI P5 Document Grammar for the IDS Text Model », Journal of the Text Encoding Initiative [Online], Issue 3. URL : http://journals.openedition.org/jtei/508 ; DOI : 10.4000/jtei.508
TEI en particulier le module [tei].
TEI ?
Un schéma TEI pourrait se résumer ainsi : « […] les conventions élaborées dans le cadre du TEI visent à permettre la description de la manière dont un document a été créé ainsi que la façon dont il a été structuré : pages, paragraphes, lignes, chapitres, dialogues, soulignements, ajouts marginaux, ratures, etc. » (Source : Fabre et Marcotte3)
Il est ainsi impératif de toujours se référer aux classes de modèle pour chaque module.
[Core] <teiCorpus>[TEI Header] <teiHeader>[textstructure] <tei>[TEI Header] <teiHeader>
[3] : Grégory Fabre et Sophie Marcotte. 2014, Pratiques de l’édition numériques, Montréal, Presses de l’Université de Montréal. (ISBN 978-2-7606-3203-5, lire en ligne), chap. 10 (« L’organisation des métadonnées »), p. 175.↥
Les différents <element>s disponibles dans le module [textstructure]
Voir la carte heuristique XMind du projet.
<!-- Toutes les définitions ci-dessous sont empruntées au CNRTL en ligne https://www.cnrtl.fr -->
<entryFree n="1" xml:id="pays-subst">
<form type="lemma" xml:id="pays-baseF">
<orth>pays</orth>
<gramGrp>
<gram type="pos" value="subst"/>
<gen value="m"/>
</gramGrp>
</form>
<form type="inflected">
<orth sameAs="#pays-baseF"/>
</form>
<sense n="1" xml:id="pays-syn-01">
<def><!-- texte de la définition sense 1 --></def>
<cit type="example">
<quote><!-- texte de la citation --></quote>
<bibl>
<author n="1">
<name>Dupont</name>
</author>
</bibl>
</cit>
<xr type="syn">
<lbl>Syn. de</lbl>
<!-- dans le cas où ce lemme a été ajouté au dictionnaire -->
<ref n="1" target="#terre-sense03">terre</ref>
</xr>
</sense>
<sense n="2" xml:id="pays-syn-02">
<def><!-- texte de la définition sense 2 --></def>
<xr type="syn">
<lbl>Syn. de</lbl>
<!-- dans le cas où ces deux lemmes ont été ajoutés au dictionnaire -->
<ref n="1" target="#endroit-sense02">endroit</ref>
<ref n="2" target="#lieu-sense01">lieu</ref>
</xr>
</sense>
</entryFree>
<entryFree n="2" xml:id="lgtps-adv">
<form type="lemma" xml:id="lgtps-adv-orth">
<orth>longtemps</orth>
<gram type="pos" value="adv"/>
</form>
<sense n="1" xml:id="lgtps-syn-01">
<def><!-- texte de la définition sense 1 --></def>
<xr type="syn">
<lbl>Syn. de</lbl>
<!-- dans le cas où ce lemme a été ajouté au dictionnaire -->
<ref n="1" target="#longuement-sense01">longuement</ref>
</xr>
</sense>
</entryFree>
<entryFree n="4" xml:id="partir-verb">
<form type="lemma" xml:id="partir-baseF">
<orth>partir</orth>
<gramGrp>
<gram type="pos" value="verb"/>
<mood value="inf"/>
<subc value="intrans"/>
</gramGrp>
</form>
<sense n="1" xml:id="partir-syn-01">
<def>
<ref target="#se-mettre-sense02">Se mettre</ref> en mouvement, <ref target="#quitter-sense01">quitter</ref> un lieu (pour une destination)
</def>
<cit type="example">
<quote>Quand ils agonisent (...) ils vous disent: −Adieu! au revoir, je pars pour un monde meilleur, nous nous retrouverons là-haut!</quote>
<bibl>
<author n="1"><name>Borel</name></author>
<date>1833</date>
<biblScope unit="p">239</biblScope>
</bibl>
</cit>
<xr type="syn">
<lbl>Syn. de</lbl>
<!-- dans le cas où ce lemme a été ajouté au dictionnaire -->
<ref n="1" target="#quitter-sense01">quitter</ref>
</xr>
</sense>
</entryFree>
<element>s pour la dictionnaire membre des modules [dictionaries], [analysis] et [core] et entre paranthèse les modèles de classes — classement hiérarchique (la descendance est indiquée par “/” et les <element>s de même niveau par “||”) :
entryFree4 ↥ (model.entryLike) :
⇾ form ↥ (model.formPart) / w ↥ (model.segLike) / m ↥ (model.segLike)
⇾ gramGrp ↥ (model.entryPart) / gram ↥ (model.morphLike) ||gen ↥ (model.morphLike)
⇾ sense (model.entryPart) / def ↥ (model.entryPart) || cit ↥ (model.entryPart.top) / quote ↥ (model.quoteLike) || xr ↥ (model.entryPart) / lbl ↥ (model.entryPart.top) || ref ↥ (model.ptrLike)
@attributs par classe d’attributs
⇾ @lemma
⇾ @xml:id
⇾ @n
⇾ @type
⇾ @sameAs
⇾ @target
Complément de lecture :
Bowers, Jack et Laurent Romary. 2016. « Deep Encoding of Etymological Information in TEI », Journal of the Text Encoding Initiative [Online], Issue 10. URL : http://journals.openedition.org/jtei/1643 ; DOI : 10.4000/jtei.1643.
Budin, Gerhard, Stefan Majewski et Karlheinz Mörth. 2012. « Creating Lexical Resources in TEI P5 », Journal of the Text Encoding Initiative [Online], Issue 3. URL : http://journals.openedition.org/jtei/522 ; DOI : 10.4000/jtei.522.
Mörth, Karlheinz, Laurent Romary, Gerhard Budin et Daniel Schopper. 2015 « Modeling Frequency Data: Methodological Considerations on the Relationship between Dictionaries and Corpora », Journal of the Text Encoding Initiative [Online], Issue 8. URL : http://journals.openedition.org/jtei/1356 ; DOI : 10.4000/jtei.1356.
Romary, Laurant. 2004. Iso and the TEI. When standards speak to standards
[4] cet element a été retenu d’une part pour plus de flexibilité par rapport à entry qui suit un schéma défini, mais surtout parce qu’il autorise 30 <element>s en comparaison avec <entry> qui n’en autorise que 10. ↥
TEI, brève introduction à XPath.5
XPath ?
Créé en 1999, XML Path Language (abr. XPath) suit les recommandations du W3C ; la version courante est 3.1. XPath est un langage de requête de XSLT ou XML Query Language, abr. XQuery. Il est utilisé dans un fichier XLST (ou XML Pointer Language, abr. XPointer) pour accéder à une partie du contenu, appelé node (fr. nœud) dans un document TEI (ou XML et JSON), selon un chemin (Path) précis. Ce chemin peut être comparé à une relation pour naviguer dans une arborescence ou un arbre généalogique ; il existe deux types de chemins, (1) absolu et (2) relatif.
XPath est indispensable pour manipuler et/ou afficher les informations désirées grâce à XSLT.
Un document TEI (XML) contient 7 types de nœuds.
<element>s — contient automatiquement un nom expansé (expanded-name)
@attributs
TEI ; il peut être suivi d’un chemin relatif et commence par /. Un chemin absolu est indépendant du nœud courant.
/. A l’inverse du chemin absolu, un chemin relatif est dépendant du nœud courant.
Une étape de localisation peut contenir 3 informations, séparées par / : un axe, un nœud de test et 0 ou n prédicats (option).
/ : racine (root)
/ : enfant (child) ou le descendant ; /entryFree/w <=> sélectionne les <w> qui suivent <entryFree>
// : descendants ; //w <=> sélectionne tous les <w> dans le document
. (<=> self::node()) : sélection le nœud (node) courant (expression relative) — il peut avoir un nombre illimité d’enfants, un nombre illimité de frères et au minimum un parent.
.. : nœud parent
| : opérateur de sélection multiple
Note 1 : l’opérateur de chemin / sert généralement à trouver un node dans une arborescence TEI.
Note 2 : les deux points répétés deux fois :: indique la séparation du chemin des nœuds avec des axes. Toutefois, on peut faire l’économie de :: en utilisant l’opérateur de chemin / — /child::entryFree/child::w/attribute::lemma <=> /entryFree/w/@lemma
Un chemin dans une arborescence TEI peut schématiquement être symbolisé par un axe sur lequel on se déplace en avant ou en arrière — il se lit de gauche à droite. Le déplacement s’effectue entre le nœud courant (appelé également le nœud contextuel) et les nœuds sélectionnés. L’axe indique la direction à suivre ; il existe 13 axes :
⇾ child:: (par défaut) : sélectionne les enfants du nœud courant ; ex. child::w <=> sélectionne tous les w qui sont enfants du nœud courant
⇾ descendant:: : sélectionne les éléments <wgt; du nœud courant ; descendant::w <=> sélectionne tous les descendants de w courant
⇾ attribute:: : sélectionne tous les attributs du nœud courant ; ex. attribute::type <=> sélectionne l’attribut @type du nœud courant — + en option sa “valeur”, ex. @type=“adv” <=> sélectionne uniquement l’attribut @type dont la valeur est “adv”.
⇾ descendant-or-self:: : sélectionne les descendants (enfants, petits-enfant…) du nœud courant et le nœud courant lui-même ; <entryFree>/<w>//m[@type=“adv”] => sélectionne tous les <m[@type=“adv”]> qui suivent w dans entryFree
⇾ following-sibling:: : sélectionne tous les “frères” après le nœud courant ; following-sibling::w
⇾ following:: : sélectionne tout après la balise de fermeture du nœud courant
⇾ namespace:: : sélectionne tous les nœuds des namespaces (espace de noms) du nœud courant
⇾ parent:: : sélectionne le parent du nœud courant
⇾ ancestor:: : sélectionne tous les ancêtres (parent, grand-parent…) du nœud courant ; <=> sélectionne tous les ancêtres de w courant
⇾ preceding-sibling:: : sélectionne tous les “frères” avant le nœud courant
⇾ preceding:: : sélectionne tous les nœuds qui apparaissent avant le nœud courant dans le document, à l’exception des ancêtres, des nœuds d’attribut et des nœuds de namespace (espace de noms)
⇾ ancestor-or-self:: : sélectionne tous les ancêtres (parent, grand-parent…) du nœud courant et le nœud courant lui-même ; //entryFree/../@type — les ancêtres qui précèdent @type
Note : il existe des syntaxes abrégées (voir le cours de Peter Stokes), ex. self::node() = .
[…] ; ils permettent de filtrer les nœuds, ex. :
⇾ [.=“valeur”] : m[@type=“adv”]
⇾ indice @n du nœud : w[@n=“2”]
⇾ or : relation logique boléenne “OU” = une des deux conditions doit être remplie (retourne vrai/true ou faux/false)
⇾ and : relation logique boléenne “ET” = les deux conditions doivent être remplies
⇾ == : deux valeurs égales
⇾ != : deux valeurs différentes
⇾ <= : la première valeur est inférieure ou égale à la seconde
⇾ < : la première valeur est inférieure à la seconde
⇾ w[@n > 3]
⇾ ! [pour différent de]
Pour aller plus loin, voir la liste des fonctions XPath — critères de sélection : de type sum(), count(), substring(), string-length(), concat(), etc.
XPath 1.0 et XSLT 1.0Quick reference
XPath 2.0Quick reference
[5] Les exemples ci-dessous seront complétés en fonction des travaux pratiques. ↥
<teiHeader>
Chapitre du TEI guidelines : The TEI Header
Notez que cet élément est obligatoire.
<element>s contenus dans le teiHeader
⇾ 7 <element>s : editionStmt | extent | notesStmt | publicationStmt | seriesStmt | sourceDesc | titleStmt
editionStmt : informations sur l’édition du matériel
extent : description de la taille approximative (pages, mots…) a
notesStmt : notes diverses mais pertinentes sur le matériel étudié
publicationStmt : informations concernant la publication et/ou la diffusion
seriesStmt : information sur la collection dans le cas où elle existe
sourceDesc : description de la source dans le cadre d’un format électronique
titleStmt : titre du l’œuvre et son/ses responsable(s) et/ou institution(s)
teiHeader
Sa carte heuristique :
taxonomie analytique dans le cadre d’une hermeneutique de l’action
Information dans les TEI guidelines.
<element>s principaux appartenant au model.biblLike
Regroupe des <element>s contenant des informations relatives aux descriptions bibliographiques : bibl | biblFull | biblStruc | listBibl | msDesc
bibl (module [core]) : citation bibliographique
biblFull (module [header]) : citation bibligraphique structurée complète
biblStruct (module [core]) : citation bibligraphique structurée
listBibl (module [core]) : liste de citations bibliographiques
msDesc (module [msdescription]) : description du manuscrit [1]
A lire: Méthodes d’encodage pour les références bibliographiques et les listes de références
Dans l’exemple ci-dessus, @sortKey (classe att.sortable) permettra de classer les références (sous réserve de la transformation dans XSLT en indiquant le chemin XPath). Voir une brève introduction ci-dessous pour première immersion en XSLT — Peter Stokes reviendra plus en détails sur chacune des fonctions.
@attributs pour créer une relation entre deux ou plusieurs nœuds
teidata.pointer fournit une URI unique pour pointer vers une donnée interne ou externe au documet.
Propriétés d’un data.pointer :
⇾ il pointe vers quelque chose
⇾ il est formé d’un xml:id NCNames valide
Note au sujet de la validité du “NCNames” : NCNames signifie un “nom non-colonisé” (= nom non-qualifié)6 est une chaîne de caractères dont les symboles suivants sont exclus “@ , $ , % , & , / , + ,,, ;”, ainsi que les espaces et les parenthèses et il ne peut pas commencer par un chiffre, un point ou le signe -.
teidata.pointer, classées par [module]
⇾ att.global.linking (@)
⇾ att.datable.custom (@datingMethod | @datingPoint ) : pour la normalisation des éléments d’évènements datables à un système de datation personnalisé autre que le calendrier Gregorien
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ref-att.datable.custom.html -->
Contayning the Originall, Antiquity, Increaſe, Moderne eſtate, and deſcription of that Citie, written in the yeare <date when-custom="1598" calendar="#julian" datingMethod="#julian">1598</date>. by Iohn Stow Citizen of London.
⇾ att.ascribed (@who) : action ou parole attribuée à une personne :
<!-- source : https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ref-att.ascribed.html -->
<castItem type="role">
<role xml:id="Barnardo">Bernardo</role>
</castItem>
<!-- ... -->
<sp who="#Barnardo">
<speaker>Bernardo</speaker>
<l n="1">Who's there?</l>
</sp>
⇾ att.ascribed.directed (@toWhom) : action ou parole destinée à une personne ou à un groupe
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ref-att.ascribed.directed.html -->
<castItem type="role">
<role xml:id="emil">Emilius.</role>
</castItem>
<castItem type="role">
<role xml:id="lov">Lovisa</role>
</castItem>
<castItem type="role">
<role xml:id="serv">A servant</role>
</castItem>
<!-- ... -->
<sp who="#emil" toWhom="#lov">
<speaker>Emil.</speaker>
<l n="1">My love!</l>
</sp>
<sp who="#lov" toWhom="#emil">
<speaker>Lov.</speaker>
<l n="2">I have no Witness of my Noble Birth</l>
<stage who="emil" toWhom="#serv">Pointing to her Woman.</stage>
<l>But that poor helpless wretch——</l>
</sp>
⇾ att.canonical (@ref) : pour associer une représentation (nom, titre d’une infromation canonique) relative à l’objet nommée ou auquel il se réfère
<!-- deux @ref qui se suivent sont séparées par un espace -->
<!-- source : https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ND.html#NDATTSnr -->
That wretched pair <name ref="#DPB1 #EBB1" type="person">the Browns</name> came to dine ...
⇾ att.datable (@calendar | @period) : pour des évènements dont la date est définie ou pas encore
<!-- Exemple 1 pour @calendar -->
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ND.html#NDDATE -->
<p>The Poole by S. <hi>Giles</hi> Churchyarde was a large water in the yeare <date calendar="#julianEngland">1244</date>. </p>
<!-- Exemple 2 pour @period -->
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/ND.html#NDDATE -->
<placeName period="#christian">Stauropolis</placeName>
⇾ att.datcat (@datcat | @valueDatca) : pour la conformité des données Data Categories qui suivent les normes ISO lesquelles sont stockées dans le répertoire ISOCat
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/DI.html#DIMVLV -->
<entry>
<!--...-->
<form>
<orth>isotope</orth>
</form>
<gramGrp>
<pos dcr:datcat="http://www.isocat.org/datcat/DC-1345"
dcr:valueDatcat="http://www.isocat.org/datcat/DC-1230">adj</pos>
</gramGrp>
<!--...-->
</entry>
⇾ att.global@attributs teidata.pointer membres de 3 classes d’attributs
⇾ att.coordinated (@start) : relatif à un système de coordonnées
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/fr/html/examples-surface.html -->
<facsimile>
<surface start="#PB49R">
<graphic url="Bovelles-49r.png"/>
</surface>
</facsimile>
<text>
<body>
<div>
<!-- ... -->
<pb xml:id="PB49R"/>
<fw>De Geometrie 49</fw>
<!-- ... -->
</div>
</body>
</text>
⇾ att.global.change (@change) : plusieurs états de révision
<element> utilisés par teidata.pointer
[6] A l’inverse du QName qui est un nom qualifié : ns:name — ns = “namespace” (espace de nom).
<teiCorpus> ↥ et primary source
<element>s membre du <teiCorpus> du module [core]
<teiCorpus> peut contenir les <element>s : teiCorpus | teiHeader | fsdDecl | TEI | text | facsimile | sourceDoc
<element>s :
teiCorpus : comprend plusieurs TEI et oblligatoirement un teiHeader :
<!-- Source https://www.tei-c.org/release/doc/tei-p5-doc/en/html/examples-teiCorpus.html -->
<teiCorpus version="3.3.0" xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<!--[en-tête du corpus]-->
</teiHeader>
<TEI>
<teiHeader>
<!--[en-tête du premier texte]-->
</teiHeader>
<text>
<!--[premier texte du corpus]-->
</text>
</TEI>
<TEI>
<teiHeader>
<!--[en-tête du deuxième texte]-->
</teiHeader>
<text>
<!--[deuxième texte du corpus]-->
</text>
</TEI>
</teiCorpus>
Un second exemple à partir des travaux de Liset Díaz :
<teiCorpus version="3.3.0" xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<!-- corpus file description-->
<titleStmt>
<title>Corpus parallèles et comparables en espagnol et en français: "Crónica de una muerte anunciada"</title>
<author>Gabriel García Márquez, traducteur Claude Couffon</author>
</titleStmt>
<publicationStmt>
<p>Publication Information</p>
</publicationStmt>
<sourceDesc>
<bibl/>
</sourceDesc>
</fileDesc>
</teiHeader>
<!-- avec <xi:include>, les données sont traitées comme si elles sont incluses dans le <teiCorpus>, autrement dit les datapointers pointeront directement dans ce document “#datapointer” -->
<xi:include href="../ENCODAGE_GABO_2019/Cronica_part_1_FINAL.xml"
xmlns:xi="http://www.w3.org/2001/XInclude"/>
<!-- Corpus en espagnol "Crónica de una muerte anunciada" -->
<xi:include href="../ENCODAGE_GABO_2019/Chronique_part_1_FINAL.xml"
xmlns:xi="http://www.w3.org/2001/XInclude"/>
<!-- Corpus en français "Chronique d'une mort annoncée" -->
</teiCorpus>
teiHeader : voir l’explication précédente
fsdDecl : déclaration de système de traits relatives à une structure de traits (paire trait-valeur) — voir l’exemple complet.
TEI : comprend obligatoirement un <teiHeader> et un texte
text : un texte de manière isolée sans <teiHeader>
facsimile ↥ : représentation d’une image d’une source écrite transcrite — relative au Primary Source. Voir l’exemple d’encodage dans le présent document.
sourceDoc :une transcription ou une représentation d’une seule source — ou une collection de sources relative au Primary Source
@attributs
<line> | <surface> | <zone>
⇾ teidata.pointer : @start
⇾ teidata.numeric : @ulx | @uly | @lrx | @lry
⇾ teidata.point : @points
<element>s membre les différents états ou révisions — tous les membres de att.global
⇾ teidata.pointer : @change
⇾ teidata.pointer : @facs
XSLT
XSLT est un langage XML, de ce fait il doit respecter le même schéma sémantique. Un fichier XSLT fait automatiquement référence à un document XML ou TEI ; un certain nombre d’instructions sera écrite selon des normes d’encodage rigoureuses (ou des règles sémantiques).
XSL vs XSLT
XSL comprend deux sous-ensembles de transformation eXtensible Stylesheet Language Transformation (abr. “XSLT”) et eXtensible Stylesheet Language Formatting Objects (abr. “XSL-FO”). XSLT permet de transformer un fichier XML ou TEI grâce aux instructions transmises en XSL. Cette transformation permettra d’afficher les données encodées ciblées du fichier TEI (ou XML) — on parle de “moteur” ou de “processor” XSLT ; tandis que l’encodage XSL-FO permet de générer un format de sortie d’un document (PDF par exemple) — qui ne peut être affiché dans un navigateur. Cependant, aujourd’hui XSL-FO est formellement nommé appelé XSL.
Source Premraj dans la conversation What’s the difference between XSLT and XSL-FO?
La syntaxe varie aussi pour donner les instructions :
⇾ de transformation avec XSLT : xsl:ELEMENT
⇾ de formattage avec XSL-FO : fo:INSTRUCTION
⇾ exemple :
<!-- Exemple emprunté http://w3schools.sinsixx.com/xslfo/xslfo_xslt.asp.htm -->
<!-- Instruction de formatage d'un document XML ou TEI en utilisant dans l'exemple ci-dessous une syntaxe identique à CSS -->
<!-- Voir également http://w3schools.sinsixx.com/xslfo/xslfo_blocks.asp.htm -->
<fo:block
font-size="14pt" font-family="verdana" color="red"
space-before="5mm" space-after="5mm">
<!-- element “apply-templates”, on selectionne tous les nœuds XML/TEI dans l'ordre -->
<xsl:apply-templates/>
</fo:block>
Pour les styles, voir également la discussion Using external CSS in XSL-FO.
XSLT
A la suite de l’exemple pour les références bibliographiques, voici un exemple d’encodage XSLT.
D’abord le titre de la section dans laquelle les références bibliographiques s’afficheront :
<!-- syntaxe HTML -->
<h2>Linguistics - philology</h2>
<!-- syntaxe XSLT -->
<xsl:apply-templates select="listBibl[@sortKey='linguistics']/bibl">
<xsl:sort select="author[1]//surname" data-type="text" order="ascending"/>
</xsl:apply-templates>
<xsl:element>s XSL : apply-template | sort
Attributs : select | data-type
XPath de la catégorie à afficher : <listBibl/bibl> dont le @sortKey est “linguistics” dans le doc TEI.
Puis la sélection de chaque type de références. Il est indispensable de donner le chemin pour chaque descendant de <bibl> de sorte que toutes les informations relatives aux références soient affichées :
<!-- aperçu partiel de l'encodage, voir le fichier complet sur GitHub -->
<xsl:template match="listBibl[@sortKey]/bibl">
<xsl:variable name="referenced-bibl" select="key('bibl', @xml:id)"/>
<xsl:variable name="bibl" select="$referenced-bibl/string-join(@xml:id, '')"/>
<xsl:variable name="bibl-author1" as="xs:string*" select="$referenced-bibl/string-join(author[@n='1']/persName/concat(surname, ', ', forename))"/>
<xsl:variable name="bibl-author2" as="xs:string*" select="$referenced-bibl/string-join((author[@n='2']/persName/concat(forename, ', ', surname), ''))"/>
<xsl:variable name="bibl-author3" as="xs:string*" select="$referenced-bibl/string-join((author[@n='3']/persName/concat(forename, ', ', surname), ''))"/>
<xsl:variable name="bibl-date" as="xs:string*" select="$referenced-bibl/string-join((date[1], '. '), '')"/>
<xsl:variable name="bibl-article" as="xs:string*" select="$referenced-bibl/string-join(title[@level='a'], '')"/>
<xsl:variable name="bibl-journal" as="xs:string*" select="$referenced-bibl/string-join(title[@level='j'], '')"/>
<xsl:variable name="bibl-book-m" as="xs:string*" select="$referenced-bibl/string-join(title[@level='m'],'')"/>
<xsl:variable name="bibl-book-s" as="xs:string*" select="$referenced-bibl/string-join(title[@level='s'],'')"/>
<xsl:variable name="bibl-editor" as="xs:string*" select="$referenced-bibl/string-join(descendant-or-self::bibl[@xml:id]/editor[@n]/persName/concat(substring(forename, 1, 1), '. ', surname), ', ')"/>
<xsl:variable name="bibl-biblScope-page" as="xs:string*" select="$referenced-bibl/string-join(biblScope[@unit='page'], '')"/>
<xsl:variable name="bibl-biblScope-pp" as="xs:string*" select="$referenced-bibl/string-join(biblScope[@unit='pp'], '')"/>
<xsl:variable name="bibl-biblScope-issue" as="xs:string*" select="$referenced-bibl/string-join(biblScope[@unit='issue'], '.')"/>
<xsl:variable name="bibl-publisher" as="xs:string*" select="$referenced-bibl/string-join((publisher, '. '), '')"/>
<xsl:variable name="bibl-idno" as="xs:string*" select="$referenced-bibl/string-join((idno, '.'), '')"/>
<xsl:variable name="bibl-h-ref" as="xs:string*" select="$referenced-bibl/string-join(child::ref/@target, ', ')"/>
<xsl:variable name="bibl-ref-date" as="xs:string*" select="$referenced-bibl/string-join(date[@when], '. ')"/>
Généralement, on affiche que partiellement le contenu des données saisies dans un document TEI. Des règles sémantiques seront alors utilisées.
xsl:value-of + l’attribut select=“VALEUR”
xsl:for-each
xsl:if
<xsl:element>s XSL : template | variable
Note : Depuis XPath 2.0, <XSLT> peut contenir des fonctions (communes à XSLT 2.0 et xQuery 1.0) fn:NOM DE LA FONCTION — voir la dernière mise à jour des fonctions “XPath and XQuery Functions and Operators 3.1” :
accesseur | erreur et Trace | numérique | chaîne | anyURI | boolean | durée, Date, Heure | QName | nœud | séquence | contexte — source en français.
Conventionnellement, dans un document de transformation XSL, l’expression fn: n’est pas nécessaire.
Affichage dans un navigateur :
elements
fn: prefixe en anglais, et en français
XSLT
@ttributs
⇾ data.text : @key (att.canonical) — chaîne de caractères Unicode
<!-- source https://tei-c.org/Vault/P5/2.7.0/doc/tei-p5-doc/fr/html/ref-att.canonical.html -->
<nationality notBefore="2002-01-15" key="US"/>
⇾ data.pointer : @ref — localiser une adresse avec une URI | @nymRef — fait référence au nom canonique
<!-- @ref -->
<!-- source https://tei-c.org/Vault/P5/2.7.0/doc/tei-p5-doc/fr/html/ND.html -->
That silly man <name ref="http://www.example.com/personography.xml#DPB1" type="person">David Paul Brown</name> has suffered
<!-- @nymRef -->
<!-- source https://tei-c.org/Vault/P5/2.7.0/doc/tei-p5-doc/fr/html/ND.html#NDNYM -->
<listNym>
<nym xml:id="N123">
<form>Antony</form>
</nym>
<!-- other nym definitions here -->
</listNym>
<forename nymRef="#N123">Tony</forename> Blair
⇾ data.enumerated : @role
<!-- source https://tei-c.org/Vault/P5/2.7.0/doc/tei-p5-doc/fr/html/ND.html -->
That silly man <name role="politician" type="person">David Paul Brown</name> has suffered ...</a>
⇾ teidata.probCert : @cert
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/en/html/ND.html#NDNA -->
<event type="birth" resp="#XYZ" cert="high">
⇾ teidata.pointer : @calendar | @period
⇾ teidata.temporel.w3c : @when | @noteBefore | @notAfter | @from | @to
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/en/html/ND.html -->
<date when-iso="13">fourteenth
century</date>
<date when-iso="1301/1400">fourteenth century</date>
<date when-iso="1301/P100Y">fourteenth century</date>
⇾ teidata.duration.w3c [tei] : @dur — précise la durée
<!-- source https://www.tei-c.org/release/doc/tei-p5-doc/en/html/ND.html -->
I reached the station <time when="14:15:00">
<time dur="PT30M0S">precisely half an hour</time>
<offset>after</offset>
<time when="13:45:00" type="occasion">the departure of the afternoon train to Boston</time>
</time>
Vanessa Bigot Juloux (EPHE-PSL, Andrews University)